package packageDataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import packageException.DataException;
import packageException.LangueException;
import packageModel.Langue;


/**
 *
 * @author Lionel & Julien
 */
public class LangueSyllathequeData {
    /**
     * Récupère la Langue dont l'id est passé en paramètre
     * 
     * @param langueId
     * @return Langue
     * @throws LangueException
     * @throws DataException  
     */
    public Langue getLangueById(int langueId) throws 
            LangueException,
            DataException {
        Langue lang = null;
        try {
            // Connexion à la base de données
            Context ctx = new InitialContext(); 
            DataSource source = (DataSource) ctx.lookup("jdbc/Syllatheque"); 
            Connection connexion = source.getConnection();
            
            // SQL
            String requeteSql = "SELECT * "
                    + "FROM Langue "
                    + "WHERE langueId = ? "
                    + "ORDER BY denomination";

            // Traitement
            PreparedStatement prepStat = connexion.prepareStatement(requeteSql);
            prepStat.setInt(1, langueId);

            ResultSet donnees = prepStat.executeQuery();
            donnees.next();
            
            lang = new Langue(
                        donnees.getInt("langueId"), 
                        donnees.getString("denomination"), 
                        donnees.getString("denominationEng")
                    );
            
            // Fermeture de la connexion
            connexion.close();
        }
        catch(SQLException e) {
            // ERREUR
            throw new LangueException(e.getMessage());
        }
        catch(NamingException e) {
            // ERREUR
            throw new DataException(e.getMessage());
        }
        return lang;
    }
    
}
